home *** CD-ROM | disk | FTP | other *** search
-
-
-
- ccccppppuuuusssseeeettttAAAAllllllllooooccccQQQQuuuueeeeuuuueeeeDDDDeeeeffff((((3333xxxx)))) ccccppppuuuusssseeeettttAAAAllllllllooooccccQQQQuuuueeeeuuuueeeeDDDDeeeeffff((((3333xxxx))))
-
-
-
- NNNNAAAAMMMMEEEE
- cpusetAllocQueueDef - allocate a cpuset_QueueDef_t structure
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- ####iiiinnnncccclllluuuuddddeeee <<<<ccccppppuuuusssseeeetttt....hhhh>>>>
-
- ccccppppuuuusssseeeetttt____QQQQuuuueeeeuuuueeeeDDDDeeeeffff____tttt ****ccccppppuuuusssseeeettttAAAAllllllllooooccccQQQQuuuueeeeuuuueeeeDDDDeeeeffff((((iiiinnnntttt ccccoooouuuunnnntttt))))
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The _c_p_u_s_e_t_A_l_l_o_c_Q_u_e_u_e_D_e_f function is used to allocate memory for a
- ccccppppuuuusssseeeetttt____QQQQuuuueeeeuuuueeeeDDDDeeeeffff____tttt structure. This memory can then be released using the
- function _c_p_u_s_e_t_F_r_e_e_Q_u_e_u_e_D_e_f(3x).
-
- The ccccoooouuuunnnntttt argument indicates the number of CPUs that will be assigned to
- the cpuset definition structure. The ccccppppuuuusssseeeetttt____QQQQuuuueeeeuuuueeeeDDDDeeeeffff____tttt structure is
- defined as follows:
-
- typedef struct {
- int flags;
- char *permfile;
- cpuset_CPUList_t *cpu;
- } cpuset_QueueDef_t;
-
-
- The ffffllllaaaaggggssss member is used to specify various control options for the
- cpuset queue. It is formed by OR-ing together zero or more of the
- following values:
-
- _CCCC_PPPP_UUUU_SSSS_EEEE_TTTT______CCCC_PPPP_UUUU______EEEE_XXXX_CCCC_LLLL_UUUU_SSSS_IIII_VVVV_EEEE
- Defines a cpuset to be restricted. Only threads attached to the
- cpuset queue (descendents of an attached thread inherit the
- attachement) may execute on the CPUs contained in the cpuset.
-
- _CCCC_PPPP_UUUU_SSSS_EEEE_TTTT______MMMM_EEEE_MMMM_OOOO_RRRR_YYYY______LLLL_OOOO_CCCC_AAAA_LLLL
- Threads assigned to the cpuset will attempt to assign memory only
- from nodes within the cpuset. Assignment of memory from outside
- the cpuset will occur only if no free memory is available from
- within the cpuset. No restrictions are made on memory assignment
- to threads running outside the cpuset.
-
- _CCCC_PPPP_UUUU_SSSS_EEEE_TTTT______MMMM_EEEE_MMMM_OOOO_RRRR_YYYY______EEEE_XXXX_CCCC_LLLL_UUUU_SSSS_IIII_VVVV_EEEE
- Threads assigned to the cpuset will attempt to assign memory only
- from nodes within the cpuset. Assignment of memory from outside
- the cpuset will occur only if no free memory is available from
- within the cpuset. Threads not assigned to the cpuset will not
- use memory from within the cpuset unless no memory outside the
- cpuset is available. If, at the time a cpuset is created, memory
- is already assigned to threads that are already running, no
- attempt will be made to explicitly move this memory. If page
- migration is enabled, the pages will be migrated when the system
- detects that most references to the pages are non-local.
-
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- ccccppppuuuusssseeeettttAAAAllllllllooooccccQQQQuuuueeeeuuuueeeeDDDDeeeeffff((((3333xxxx)))) ccccppppuuuusssseeeettttAAAAllllllllooooccccQQQQuuuueeeeuuuueeeeDDDDeeeeffff((((3333xxxx))))
-
-
-
- _CCCC_PPPP_UUUU_SSSS_EEEE_TTTT______MMMM_EEEE_MMMM_OOOO_RRRR_YYYY______KKKK_EEEE_RRRR_NNNN_EEEE_LLLL______AAAA_VVVV_OOOO_IIII_DDDD
- The kernel should attempt to avoid allocating memory from nodes
- contained in this cpuset. If kernel memory requests cannot be
- satisfied from outside this cpuset, this option will be ignored
- and allocations will occur from within the cpuset. (This avoidance
- currently extends only to keeping buffer cache away from the
- protected nodes.)
-
- _CCCC_PPPP_UUUU_SSSS_EEEE_TTTT______MMMM_EEEE_MMMM_OOOO_RRRR_YYYY______MMMM_AAAA_NNNN_DDDD_AAAA_TTTT_OOOO_RRRR_YYYY
- The kernel will limit all memory allocations to nodes that are
- contained in this cpuset. If memory requests cannot be satisfied,
- the allocating process will sleep until memory is available. The
- process will be killed if no more memory can be allocated. See
- policies below.
-
- _CCCC_PPPP_UUUU_SSSS_EEEE_TTTT______PPPP_OOOO_LLLL_IIII_CCCC_YYYY______PPPP_AAAA_GGGG_EEEE
- Requires MEMORY_MANDATORY. This is the default policy if no policy
- is specified. This policy will cause the kernel to page user pages
- to the swap file (see _s_w_a_p(1M)) to free physical memory on the
- nodes contained in this cpuset. If swap space is exhausted, the
- process will be killed.
-
- _CCCC_PPPP_UUUU_SSSS_EEEE_TTTT______PPPP_OOOO_LLLL_IIII_CCCC_YYYY______KKKK_IIII_LLLL_LLLL
- Requires MEMORY_MANDATORY. The kernel will attempt to free as much
- space as possible from kernel heaps, but will not page user pages
- to the swap file. If all physical memory on the nodes contained
- in this cpuset are exhausted, the process will be killed.
-
- The ppppeeeerrrrmmmmffffiiiilllleeee member is the name of the file that defines the access
- permissions for the cpuset queue. The file permissions of filename
- referenced by permfile define access to the cpuset. Every time
- permissions need to be checked, the current permissions of this file are
- used. Thus, it is possible to change the access to a particular cpuset
- without having to tear it down and recreate it, simply by changing the
- access permissions. Read access to the permfile allows a user to
- retrieve information about a cpuset, while execute permission allows the
- user to attach a process to the cpuset.
-
- The ccccppppuuuu member is a pointer to a ccccppppuuuusssseeeetttt____CCCCPPPPUUUULLLLiiiisssstttt____tttt structure. The memory
- for the ccccppppuuuusssseeeetttt____CCCCPPPPUUUULLLLiiiisssstttt____tttt structure is allocated and released when the
- ccccppppuuuusssseeeetttt____QQQQuuuueeeeuuuueeeeDDDDeeeeffff____tttt structure is allocated and released (see
- cpusetFreeQueueDef(3x)). The ccccppppuuuusssseeeetttt____CCCCPPPPUUUULLLLiiiisssstttt____tttt structure contains the list
- of CPUs assigned to the cpuset. The ccccppppuuuusssseeeetttt____CCCCPPPPUUUULLLLiiiisssstttt____tttt structure (defind
- in <cpuset.h>) is defined as follows:
-
- typedef struct {
- int count;
- cpuid_t *list;
- } cpuset_CPUList_t;
-
-
-
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-
-
-
- ccccppppuuuusssseeeettttAAAAllllllllooooccccQQQQuuuueeeeuuuueeeeDDDDeeeeffff((((3333xxxx)))) ccccppppuuuusssseeeettttAAAAllllllllooooccccQQQQuuuueeeeuuuueeeeDDDDeeeeffff((((3333xxxx))))
-
-
-
- The ccccoooouuuunnnntttt member defines the number of CPUs contained in the list.
-
- The lllliiiisssstttt member is the pointer to the list (an allocated array) of the
- CPU IDs. The memory for the lllliiiisssstttt array is allocated and released when
- the ccccppppuuuusssseeeetttt____CCCCPPPPUUUULLLLiiiisssstttt____tttt structure is allocated and released. The size of
- the list is determined by the ccccoooouuuunnnntttt argument passed into the function
- _c_p_u_s_e_t_A_l_l_o_c_Q_u_e_u_e_D_e_f.
-
- EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS
- This example creates a cpuset queue using _c_p_u_s_e_t_C_r_e_a_t_e(3x) and provides
- an example of how _c_p_u_s_e_t_A_l_l_o_c_Q_u_e_u_e_D_e_f might be used. The cpuset created
- will have access controlled by the file _////_uuuu_ssss_rrrr_////_tttt_mmmm_pppp_////_mmmm_yyyy_pppp_eeee_rrrr_mmmm_ffff_iiii_llll_eeee; it will
- contain CPU IDs 4, 8, and 12; and it will be CPU exclusive and memory
- exclusive:
-
- cpuset_QueueDef_t *qdef;
- char *qname = "myqueue";
-
- /* Alloc queue def for 3 CPU IDs */
- qdef = cpusetAllocQueueDef(3);
- if (!qdef) {
- perror("cpusetAllocQueueDef");
- exit(1);
- }
-
- /* Define attributes of the cpuset */
- qdef->flags = CPUSET_CPU_EXCLUSIVE
- | CPUSET_MEMORY_EXCLUSIVE;
- qdef->permfile = "/usr/tmp/mypermfile"
- qdef->cpu->count = 3;
- qdef->cpu->list[0] = 4;
- qdef->cpu->list[1] = 8;
- qdef->cpu->list[2] = 12;
-
- /* Request that the cpuset be created */
- if (!cpusetCreate(qname, qdef)) {
- perror("cpusetCreate");
- exit(1);
- }
- cpusetFreeQueueDef(qdef);
-
-
- NNNNOOOOTTTTEEEESSSS
- _c_p_u_s_e_t_A_l_l_o_c_Q_u_e_u_e_D_e_f is found in the library "libcpuset.so", and will be
- loaded if the option _----_llll_cccc_pppp_uuuu_ssss_eeee_tttt is used with _cccc_cccc(1) or _llll_dddd(1).
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- cpuset(1), cpusetAllocQueueDef(3x), cpusetFreeQueueDef(3x). cpuset(5).
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 3333
-
-
-
-
-
-
- ccccppppuuuusssseeeettttAAAAllllllllooooccccQQQQuuuueeeeuuuueeeeDDDDeeeeffff((((3333xxxx)))) ccccppppuuuusssseeeettttAAAAllllllllooooccccQQQQuuuueeeeuuuueeeeDDDDeeeeffff((((3333xxxx))))
-
-
-
- DIAGNOSTICS
- If successful, _c_p_u_s_e_t_A_l_l_o_c_Q_u_e_u_e_D_e_f returns a pointer to a
- ccccppppuuuusssseeeetttt____QQQQuuuueeeeuuuueeeeDDDDeeeeffff____tttt structure. If _c_p_u_s_e_t_A_l_l_o_c_Q_u_e_u_e_D_e_f fails, it returns
- NULL and eeeerrrrrrrrnnnnoooo is set to indicate the error. The possible eeeerrrrrrrrnnnnoooo values
- include those returned by _ssss_bbbb_rrrr_kkkk(2) and the following:
-
- EEEEIIIINNNNVVVVAAAALLLL
- Invalid argument was supplied. The user must supply a value greater
- than or equal to 0.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 4444
-
-
-
-